export interface TAttendanceSetting {
  /**
   * 自动推送补卡提醒 是否启用 1是 2否
   */
  automaticPushCardReminder?: string;
  /**
   * 自动推送打卡提醒 是否启用 1是 2否
   */
  automaticPushPunchReminder?: string;
  /**
   * 上班前5-15分钟内推送打卡提醒 是否启用 1是 2否
   */
  clockInForWorkFifteenMinutes?: string;
  /**
   * 员工忘记打上班卡，系统会在上班后半小时内推送提醒 是否启用 1是 2否
   */
  clockInForWorkHalfAnHour?: string;
  /**
   * 打卡成功微信通知 是否启用 1是 2否
   */
  clockInSuccessfulWeChatNotice?: string;
  /**
   * 下班后5-15分钟内，系统自动推送打卡提醒 是否启用 1是 2否
   */
  clockOutReminderFifteenMinutes?: string;
  /**
   * 每日推送 是否启用 1是 2否
   */
  everyDayPush?: string;
  /**
   * 每日推送 时分秒
   */
  everyDayPushHMS?: string;
  /**
   * 每周五推送 是否启用 1是 2否
   */
  everyFridayPush?: string;
  /**
   * 每周五推送 时分秒
   */
  everyFridayPushHMS?: string;
  /**
   * 每月推送 是否启用 1是 2否
   */
  monthlyPush?: string;
  /**
   * 每月推送 时分秒
   */
  monthlyPushHMS?: string;
  /**
   * 打卡成功声音提醒 是否启用 1是 2否
   */
  voiceRemindClockInSuccess?: string;
  [property: string]: any;
}

export interface TOtherSetting {
  /**
   * 考勤周期
   */
  attendanceCycle?: string;
  /**
   * 排班限制 1 仅限制历史考勤月不可排班 2 额外限制每日零点之前日期不可排班 3 额外限制昨日零点之前日期不可排班
   */
  schedulingRestriction?: '1' | '2' | '3';
  [property: string]: string | undefined;
}
export interface TWorkCalendarData {
  /**
   * 休息日
   */
  dayOff: DayOff[];
  /**
   * 类型描述
   */
  describe: string;
  /**
   * 是否同步国家节假日安排 1 是 2 否
   */
  isSynchronization: number;
  /**
   * 类型名称
   */
  name: string;
  /**
   * 范围
   */
  scope: Scope[];
  /**
   * 工作日历类型 1、月休息 2、按月休息 3、无固定休息日
   */
  type: number;
  [property: string]: any;
}

export interface DayOff {
  /**
   * 每月固定 休息日
   */
  monthly: number[];
  /**
   * 周几 休息
   */
  week: number[];
  [property: string]: any;
}

export interface Scope {
  /**
   * 部门id
   */
  departmentId: number[];
  /**
   * 用户id
   */
  userId: number[];
  [property: string]: any;
}

export interface TReminder {
  /**
   * 考勤打卡小程序显示【我的假期】
   */
  appletDisplay: string;
  /**
   * 余额变动 是否提醒
   */
  balanceChangeWarn: string;
  /**
   * 假期扣减 是否提醒
   */
  leaveDeductionWarn: string;
  /**
   * 假期扣减 提前多久提醒
   */
  leaveDeductionWarnDay: string;
  /**
   * 假期发放 是否提醒
   */
  leavePaymentWarn: string;
  /**
   * 假期发放 提前多久提醒
   */
  leavePaymentWarnDay: string;
  [property: string]: any;
}
/**
 * 打卡地点
 */
export interface TAddress {
  id?: number;
  /**
   * 是否允许不一致
   */
  isAllowedInconsistency: boolean;
  /**
   * 地址名称
   */
  name: string;
  /**
   * 范围 1、圆形 2、地理围栏
   */
  scope: number;
  /**
   * 坐标信息
   */
  scopeInfo: ScopeInfo[];
  [property: string]: any;
}

/**
 * 坐标信息
 */
export interface ScopeInfo {
  circle: Circle;
  /**
   * 多边形
   */
  polygon: Polygon[];
  [property: string]: any;
}

export interface Circle {
  /**
   * 圆心
   */
  center: Center;
  /**
   * 半径
   */
  radius: number;
  [property: string]: any;
}

/**
 * 圆心
 */
export interface Center {
  /**
   * 纬度
   */
  latitude: number;
  /**
   * 经度
   */
  longitude: number;
  [property: string]: any;
}

export interface Polygon {
  /**
   * 纬度
   */
  latitude: number;
  /**
   * 经度
   */
  longitude: number;
  [property: string]: any;
}

/**
 * 考勤组
 */
export interface TClasses {
  id?: number;
  /**
   * 【attendance_classes】表id 班次管理
   */
  attendanceClassesId: number;
  /**
   * 【attendance_classes_setting】表id 选用班次
   */
  attendanceClassesSettingId: number[];
  /**
   * 【attendance_clock_in】表id 打卡方案
   */
  attendanceClockInId: number;
  /**
   * 【attendance_cycle】表id 考勤周期
   */
  attendanceCycleId: number;
  /**
   * 适用人员
   */
  attendanceTeamMember: AttendanceTeamMember[];
  /**
   * 【attendance_work_calendar】表id  工作日历表
   */
  attendanceWorkCalendarId: number;
  /**
   * 是否默认 1是 2否
   */
  isDefault: number;
  /**
   * 考勤班组名称
   */
  name: string;
  /**
   * 排班专员 用户id
   */
  schedulingOfficerId: number[];
  [property: string]: any;
}

export interface AttendanceTeamMember {
  /**
   * 适用部门 1 是 2否
   */
  applicableDepartment: number;
  /**
   * 适用人员 1 是 2否
   */
  applicableEmployee: number;
  /**
   * 部门id
   */
  departmentId: number;
  id: number;
  /**
   * 类型 1正常打卡 2 豁免打卡
   */
  type: number;
  /**
   * 用户id
   */
  userId: number;
  [property: string]: any;
}

/**
 * 考勤豁免
 */
export interface TRemit {
  deleteIds: number[];
  list: List[];
  [property: string]: any;
}

export interface List {
  /**
   * 适用部门 1 是 2否
   */
  applicable_department: number;
  /**
   * 适用人员 1 是 2否
   */
  applicable_employee: number;
  /**
   * 传 0     注意注意！！！！
   */
  attendance_team_id: number;
  /**
   * 部门id
   */
  departmentId: number;
  id: number;
  /**
   * 类型 传 2
   */
  type: number;
  /**
   * 用户id
   */
  userId: number;
  [property: string]: any;
}

/**
 * 班次管理
 */
export interface TClassesManage {
  /**
   * 上下班时间设置
   */
  attendanceClassesSetting: AttendanceClassesSetting[];
  id?: number;
  /**
   * 班次名称
   */
  name: string;
  /**
   * 负责人id
   */
  responsibleUserId: number;
  /**
   * 班次类型 (1单班次 2两班制 3三班制 4多班制)
   */
  type: number;
  [property: string]: any;
}

export interface AttendanceClassesSetting {
  /**
   * 颜色
   */
  color: string;
  /**
   * 上下班时间段
   */
  commutingTime: CommutingTime[];
  /**
   * 最晚打卡信息
   */
  latestClockIn: LatestClockIn;
  /**
   * 班次名称
   */
  name: string;
  /**
   * 班次简称
   */
  shortName: string;
  [property: string]: any;
}

export interface CommutingTime {
  /**
   * 下班时间
   */
  afterWorkTime: string;
  /**
   * 下班有效打卡时段结束
   */
  afterWorkTimeClockInEnd: string;
  /**
   * 下班有效打卡时段开始
   */
  afterWorkTimeClockInStart: string;
  /**
   * 下班提前打卡时间（单位:分钟）
   */
  afterWorkTimeForward: number;
  /**
   * 休息时间（结束）
   */
  restTimeEnd: string;
  /**
   * 休息时间(开始)
   */
  restTimeStart: string;
  /**
   * 打卡规则(1、上下班均需打卡 2、仅上班打卡 3、仅下班打卡 4、上班或下班打一次卡即可 5、上下班无需打卡)
   */
  rule: number;
  /**
   * 上班时间
   */
  workingTime: string;
  /**
   * 上班延迟打卡时间（单位:分钟）
   */
  workingTimeBeLate: number;
  /**
   * 上班有效打卡时段结束
   */
  workingTimeClockInEnd: string;
  /**
   * 上班有效打卡时段开始
   */
  workingTimeClockInStart: string;
  [property: string]: any;
}

/**
 * 最晚打卡信息
 */
export interface LatestClockIn {
  /**
   * 延后多少天，0代表今天，1代表明天...
   */
  clockInDay: number;
  /**
   * 打卡时间
   */
  clockInTime: string;
  /**
   * 加班前休息时长(单位：小时)
   */
  restTime: number;
  [property: string]: any;
}
